home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
comm
/
ambos
/
BBSInterface.lha
/
BBS.mod
< prev
next >
Wrap
Text File
|
1995-04-11
|
22KB
|
392 lines
(******************************************************************************)
(* Modulname : BBS *)
(* Version : v1.100 (beta) *)
(* Datum : 23.03.1995 *)
(* Autor : Andreas Leicht *)
(* Adresse : Seefahrerstr. 5 *)
(* : 27721 Ritterhude *)
(* Telefon : 0421 / 63 79 76 *)
(* EMail : Andi@doom.gun.de *)
(* Copyright : Andreas Leicht © 05.11.1994 *)
(* Sprache : Oberon 2 *)
(* Compiler : Amiga Oberon v3.20d *)
(******************************************************************************)
(******************************************************************************)
(* Geschichte : v1.000 (beta) - 05.11.1994 - AO v3.20d *)
(* : Erste Umsetzung *)
(* Geschichte : v1.100 (beta) - 23.03.1995 - AO v3.20d *)
(* : Hatte gegen einige kleine Standarts verstoßen - Sorry *)
(* : - Modulnamen von `AmbosLibOberon` nach `BBS` geändert *)
(* : Jetzt heißt das Modul auch wie die Library *)
(* : - Strukturnamen beginnen jetzt mit einem Großbuchstaben *)
(* : - Konstanten beginnen jetzt mit einem Kleinbuchstaben *)
(* : - Alle als privat deklarierte Funktionen rausgeschmissen *)
(* : Ne Menge dummer Fehler verbessert (Scheiß `C`) ;-) *)
(* : Den Eintrag `language` in der ExternInfo-Struktur vergessen *)
(* : Weitere Fehler beseitigt *)
(******************************************************************************)
MODULE BBS;
IMPORT exe * := Exec,
dos * := Dos,
sys * := SYSTEM;
TYPE
ExternInfoPtr * = UNTRACED POINTER TO ExternInfo;
TransferNodePtr * = UNTRACED POINTER TO TransferNode;
UserDatenExternPtr * = UNTRACED POINTER TO UserDatenExtern;
FileExternPtr * = UNTRACED POINTER TO FileExtern;
BrettDatenExternPtr * = UNTRACED POINTER TO BrettDatenExtern;
BBSMenuPtr * = UNTRACED POINTER TO BBSMenu;
CONST
bbsName * = "BBS.library";
bbsVersion * = 1;
(******************************************************************************)
(* *)
(******************************************************************************)
CONST
up * = 6;
down * = 3;
left * = 4;
right * = 5;
delete * = 7;
backspace * = 8;
return * = 13;
(******************************************************************************)
(* Werte für StartetFrom in der ExternInfo Struktur *)
(******************************************************************************)
CONST
fromAMenu * = 0; (* Programm wurd von der GeoNeto- oder *)
(* AmBoS-Menu-Oberfläche gestartet *)
fromNachLogin * = 1; (* Batchdatei *)
fromGastLogin * = 2; (* Batchdatei *)
fromVorAntrag * = 3; (* Batchdatei *)
fromNachAntrag * = 4; (* Batchdatei *)
fromVorDownLoad * = 5; (* Batchdatei *)
fromNachDownLoad * = 6; (* Batchdatei *)
fromVorUpLoad * = 7; (* Batchdatei *)
fromNachUpLoad * = 8; (* Batchdatei *)
fromLogoff * = 9; (* Batchdatei *)
fromRelogin * = 10; (* Batchdatei *)
fromSetup * = 11; (* Dieser Modus ist noch nicht implementiert, *)
(* er soll dazu verwendet werden, konfor- *)
(* tables Setup für Externe dem Sysop zur *)
(* Verfügunug stellen *)
(* Sollte dieser Modus auftauchen das *)
(* Programm am besten sofort beenden *)
(******************************************************************************)
(* Werte für Language in der ExternInfo-Struktur *)
(******************************************************************************)
CONST
languageDeutsch * = 0;
languageEnglish * = 1;
(******************************************************************************)
(* Werte für DateFormat in der ExternInfo-Struktur *)
(******************************************************************************)
CONST
dateFormatCDN * = 0; (* Tag-Monat-Jahr *)
dateFormatUSA * = 1; (* Monat-Tag-Jahr *)
(******************************************************************************)
(* Werte für tr_Type in der TransferNode-Struktur *)
(******************************************************************************)
CONST
transferUpLoad * = 1;
transferDownLoad * = 2;
(******************************************************************************)
(* Filetyen *)
(******************************************************************************)
CONST
fileTypeMessage * = 1;
fileTypeBin * = 2;
(******************************************************************************)
(* Bretttypen *)
(******************************************************************************)
CONST
brettTypeNoBrett * = 0;
brettTypeAsc * = 1;
brettTypeBin * = 2;
brettTypeAscBin * = 3;
brettTypeHead * = 4;
brettTypeExtern * = 5;
brettTypePm * = 6;
(******************************************************************************)
(* Eine ExternInfo-Struktur. Wird von der Funktion bbs_Open() zurückgegeben *)
(******************************************************************************)
TYPE
ExternInfo * = STRUCT
conOnly * : BOOLEAN; (* Wenn ConLogin ungleich 0 *)
startedFrom * : LONGINT; (* Hier kann man entnehmen, von wo das *)
(* Programm gestartet wurde *)
userName * : exe.STRPTR; (* Name des Users *)
city * : exe.STRPTR; (* Wohnort des Users *)
loginTime * : dos.Date; (* Zeitpunkt des Logins *)
totalDownLoads * : LONGINT; (* Download Bytes des Users *)
totalUpLoads * : LONGINT; (* Upload Bytes des Users *)
baudRate * : LONGINT; (* BaudRate des Connects *)
lines * : LONGINT; (* Anzahl der Zeilen des Users *)
callsToday * : LONGINT; (* Anzahl der Anrufe heute in der Box *)
callsTotal * : LONGINT; (* Anzahl der gesammten Anrufe in der Box *)
lastCallNr * : LONGINT; (* Nummer des letzten Anrufes vom User *)
(* in der Box *)
callNr * : LONGINT; (* Aktuelle Anrufnummer *)
transferListe * : exe.ListPtr; (* Liste der Up- bzw. Downgelodeten *)
(* Files wenn das Programm aus der *)
(* Nachupload- oder Nachdownload-Batch *)
(* gestartet wurde *)
autoLogOff * : LONGINT; (* Ist dieser Wert ungleich NULL befinde *)
(* sich der User in einer Autologoff- *)
(* Sequenze, d.h. Eingabeaufforderungen *)
(* sind tunlichst zu unterlassen... ;-) *)
language * : INTEGER; (* Die Sprache, die der User eingestellt *)
(* hat *)
dateFormat * : INTEGER; (* Das bevorzugte Datumsformat des Users *)
coSysop * : INTEGER; (* Wenn ungleich NULL ist der User Sysop *)
(* oder CoSysop *)
ambosVersion * : INTEGER; (* AmBoS Version *)
ambosRevision * : INTEGER; (* AmBoS Revision *)
ambosSerialNumber * : LONGINT; (* Seriennummer oder 0 für DEMO-Version *)
END;
(******************************************************************************)
(* Nodes in der ExternInfo-Struktur->TransferListe *)
(******************************************************************************)
TYPE
TransferNode * = STRUCT
trSucc * : TransferNodePtr;
trPrev * : TransferNodePtr;
trType * : sys.BYTE; (* Art der Übertragung Up oder Download *)
trPri * : sys.BYTE;
trName * : exe.STRPTR; (* Names des Files *)
trRealName * : exe.STRPTR; (* Name unter dem das File auf dem *)
(* Datenträger zu finden ist *)
trBoxPath * : exe.STRPTR; (* Kompletter Brettpfad *)
trDosPath * : exe.STRPTR; (* Pfad unter dem das File auf dem *)
(* Datenträger zu finden ist *)
trUpLoader * : exe.STRPTR; (* Der Uploader des Files *)
trSize * : LONGINT; (* Länge des Files in Bytes *)
trCps * : LONGINT; (* CPS_Rate bei der Übertragung *)
trAnzDownLoads * : LONGINT; (* Wie oft das File schon downgeloadet wurde*)
trProtectedBoard * : LONGINT; (* File liegt in einem durch Zugangsgruppe *)
(* geschützten Pfad *)
END;
(******************************************************************************)
(* Eine UserDatenExtern-Struktur. Wird von bbs_LoadUserData() zurückgegeben *)
(******************************************************************************)
TYPE
UserDatenExtern * = STRUCT
ambosPrivat * : exe.APTR;
userName * : ARRAY 30 OF CHAR;
firstName * : ARRAY 50 OF CHAR;
name * : ARRAY 50 OF CHAR;
city * : ARRAY 100 OF CHAR;
street * : ARRAY 60 OF CHAR;
phoneNr * : ARRAY 30 OF CHAR;
fax * : ARRAY 30 OF CHAR;
modem * : ARRAY 30 OF CHAR;
computer * : ARRAY 30 OF CHAR;
substitute * : ARRAY 30 OF CHAR; (* Vertreter *)
dlProtocol * : ARRAY 30 OF CHAR;
packer * : ARRAY 30 OF CHAR;
birthYear * : INTEGER;
birthMonth * : INTEGER;
birthDay * : INTEGER;
lastLogin * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
newsDate * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
firstLogin * : LONGINT; (* In Minuten seid dem 01.01.1978 *)
dlFreeSpace * : LONGINT;
upLoads * : LONGINT;
downLoads * : LONGINT;
lastCall * : LONGINT;
onlineTime * : INTEGER;
onlineToday * : INTEGER;
lines * : INTEGER;
zone * : INTEGER;
upDownRatio * : INTEGER;
maxPmMails * : INTEGER;
numCrashes * : INTEGER;
numLogins * : INTEGER;
END;
(******************************************************************************)
(* Eine FileExtern-Struktur *)
(******************************************************************************)
TYPE
FileExtern * = STRUCT
ambosPrivat * : exe.APTR;
number * : LONGINT; (* Nummer des Files im Brett *)
delete * : INTEGER; (* kann gesetzt werden *)
markiert * : INTEGER; (* Eintrag ist markiert *)
fileType * : INTEGER; (* File oder Mail *)
brettType * : INTEGER; (* Art des aktuellen Brettes *)
downLoads * : INTEGER; (* Anzahl der Zugriffe auf den Eintrag *)
upLoadDate * : LONGINT; (* in Minuten seit dem 01.01.1978 *)
createDate * : LONGINT; (* in Minuten seit dem 01.01.1978 *)
size * : LONGINT; (* Länge von Binärfiles *)
lines * : LONGINT; (* Anzahl der Zeilen bei Mails *)
upLoader * : exe.STRING; (* Name des Uploaders *)
realName * : exe.STRING; (* Name unter dem das File auf der *)
(* Platte zu finden ist *)
boxPath * : exe.STRING; (* Brettpfad *)
dosPath * : exe.STRING; (* Dospfad des aktuellen Brettes *)
readMeFile * : ARRAY 42 OF CHAR;
boxName * : ARRAY 42 OF CHAR;
comment * : ARRAY 50 OF CHAR;
END;
(******************************************************************************)
(* Eine BrettDatenExtern-Struktur *)
(******************************************************************************)
TYPE
BrettDatenExtern * = STRUCT
ambosPrivat * : exe.APTR;
brettName * : ARRAY 40 OF CHAR;
brettPfad * : ARRAY 256 OF CHAR;
schreibGruppe * : ARRAY 40 OF CHAR;
zugangsGruppe * : ARRAY 40 OF CHAR;
leseGruppe * : ARRAY 40 OF CHAR;
verwalter * : ARRAY 40 OF CHAR;
brettPasswort * : ARRAY 40 OF CHAR;
letzterEintrag * : LONGINT;
brettFlags * : LONGINT;
brettTyp * : exe.BYTE;
locked * : exe.BYTE;
area * : exe.BYTE;
noRatio * : exe.BYTE;
END;
(******************************************************************************)
(* Datenstruktur für bbs_menu() *)
(******************************************************************************)
TYPE
BBSMenu * = STRUCT
next * : exe.APTR;
name * : exe.APTR;
menuID * : LONGINT; (* Niemals auf 0 setzen ! *)
private1 * : LONGINT; (* Immer mit 0 initialisieren ! *)
private2 * : SHORTINT; (* Immer mit 0 initialisieren ! *)
END;
(******************************************************************************)
(* *)
(******************************************************************************)
VAR
bbs * : exe.LibraryPtr;
base * : exe.LibraryPtr;
(******************************************************************************)
(* bbs_Open - Anmelden des externen Programmes am Port *)
(* bbs_Close - Abmelden des externen Programmes bei Port *)
(* bbs_PutS - einen String ausgeben *)
(* bbs_GetS - einen String einlesen *)
(* bbs_SGetS - liest einen nicht sichtbaren String ein *)
(* bbs_GetC - liest ein Zeichen ein *)
(* bbs_FGetC - liest ein gefiltertes Zeichen ein *)
(* bbs_Menu - baut ein horizontales Cursor-Shortcut-Menü auf *)
(* bbs_Graphic - zeigt eine ANSI-Datei an *)
(* bbs_Text - zeigt eine Text-Datei an *)
(* bbs_RPutS - *)
(* bbs_WGetC - liest ein Zeichen ein *)
(* bbs_WFGetC - liest ein gefiltertes Zeichen ein *)
(* bbs_PrintF - formatierte Ausgabe (wie dos.PrintF) *)
(* bbs_WGetS - *)
(* bbs_LookC - lesen eines Zeichen (asynchron) *)
(* bbs_FirstUser - Userdaten des ersten Users auslesen *)
(* bbs_NextUser - weitere Userdaten lesen *)
(* bbs_ObtainName - belegen eines Names *)
(* bbs_ReleaseName - freigeben eines Names *)
(* bbs_LoadUserData - auslesen von Userdaten *)
(* bbs_SaveUserData - speichern von Userdaten *)
(* bbs_FreeUserData - Userdaten freigeben *)
(* bbs_MailToUser - Nachricht an einen User schreiben *)
(* bbs_MailToBrett - Nachricht in ein Brett schreiben *)
(* bbs_GetBrettType - Bretttyp feststellen *)
(* bbs_FirstBrettInhalt - Brettdaten auslesen *)
(* bbs_NextBrettInhalt - Brettinhalt weiterlesen *)
(* bbs_BrettInhaltByNumber - bestimmten Brettinhalt lesen *)
(* bbs_FreeBrettInhalt - Brettinhalt freigeben *)
(* bbs_SaveBrettInhalt - Brettinhalt speichern *)
(******************************************************************************)
PROCEDURE Open *{bbs,- 42}(port{9} : ARRAY OF CHAR): ExternInfoPtr;
PROCEDURE Close *{bbs,- 48};
PROCEDURE PutS *{bbs,- 54}(string{9} : ARRAY OF CHAR);
PROCEDURE GetS *{bbs,- 60}(deposid{9} : ARRAY OF CHAR;
maxChars{1} : LONGINT;
mode{2} : LONGINT): INTEGER;
PROCEDURE SGetS *{bbs,- 66}(deposid{9} : ARRAY OF CHAR;
maxChars{10} : LONGINT;
mode{11} : LONGINT): INTEGER;
PROCEDURE GetC *{bbs,- 78}(): CHAR;
PROCEDURE FGetC *{bbs,- 84}(): CHAR;
PROCEDURE Menu *{bbs,- 90}(menuDaten{9} : BBSMenuPtr): LONGINT;
PROCEDURE Graphic *{bbs,- 96}(fileName{9} : ARRAY OF CHAR);
PROCEDURE Text *{bbs,-102}(fileName{9} : ARRAY OF CHAR);
PROCEDURE RPutS *{bbs,-114}(string{9} : ARRAY OF CHAR);
PROCEDURE WGetC *{bbs,-138}(waitBits{1} : LONGINT): CHAR;
PROCEDURE WFGetC *{bbs,-144}(waitBits{1} : LONGINT): CHAR;
PROCEDURE PrintF *{bbs,-168}(string{9} : ARRAY OF CHAR;
arg1{10}.. : exe.APTR);
PROCEDURE WGetS *{bbs,-174};
PROCEDURE LookC *{bbs,-186}(): SHORTINT;
PROCEDURE FirstUser *{bbs,-192}(): UserDatenExternPtr;
PROCEDURE NextUser *{bbs,-198}(userDaten{9} : UserDatenExternPtr): UserDatenExternPtr;
PROCEDURE ObtainName *{bbs,-204}(string{9} : ARRAY OF CHAR);
PROCEDURE ReleaseName *{bbs,-210}(string{9} : ARRAY OF CHAR);
PROCEDURE LoadUserData *{bbs,-216}(name{9} : ARRAY OF CHAR): UserDatenExternPtr;
PROCEDURE SaveUserData *{bbs,-222}(userDaten{9} : UserDatenExternPtr);
PROCEDURE FreeUserData *{bbs,-228}(userDaten{9} : UserDatenExternPtr);
PROCEDURE MailToUser *{bbs,-234}(userName{9} : ARRAY OF CHAR;
absender{1} : ARRAY OF CHAR;
betreff{2} : ARRAY OF CHAR;
textFile{10} : ARRAY OF CHAR);
PROCEDURE MailToBrett *{bbs,-240}(userName{9} : ARRAY OF CHAR;
absender{1} : ARRAY OF CHAR;
betreff{2} : ARRAY OF CHAR;
textFile{10} : ARRAY OF CHAR);
PROCEDURE GetBrettType *{bbs,-246}(): LONGINT;
PROCEDURE FirstBrettInhalt *{bbs,-252}(): FileExternPtr;
PROCEDURE NextBrettInhalt *{bbs,-258}(fileExtern{9} : FileExternPtr);
PROCEDURE BrettInhaltByNumber *{bbs,-264}(number{1} : LONGINT): FileExternPtr;
PROCEDURE FreeBrettInhalt *{bbs,-270}(fileExtern{9} : FileExternPtr);
PROCEDURE SaveBrettInhalt *{bbs,-276}(fileExtern{9} : FileExternPtr);
(* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
BEGIN
bbs := exe.OpenLibrary(bbsName,bbsVersion);
base := bbs;
CLOSE
IF bbs#NIL THEN exe.CloseLibrary(bbs) END;
END BBS.